package org.jberet.test.integration.chunk; import java.io.Serializable; import java.util.Iterator; import javax.batch.api.chunk.ItemReader; import javax.inject.Named; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import javax.persistence.TypedQuery; import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.Root; import org.jboss.logging.Logger; @Named public class MyTestItemReader implements ItemReader { private final static Logger LOGGER = Logger .getLogger(MyTestItemReader.class); @PersistenceContext private EntityManager entityManager; private Iterator<MyEntity> iterator; private int index; @Override public void open(Serializable checkpoint) throws Exception { LOGGER.debug("open"); if (null != checkpoint) { this.index = (Integer) checkpoint; } else { this.index = 0; } initIterator(); } private void initIterator() { CriteriaBuilder criteriaBuilder = this.entityManager .getCriteriaBuilder(); CriteriaQuery<MyEntity> criteriaQuery = criteriaBuilder .createQuery(MyEntity.class); Root<MyEntity> root = criteriaQuery.from(MyEntity.class); criteriaQuery.select(root); TypedQuery<MyEntity> typedQuery = this.entityManager .createQuery(criteriaQuery); typedQuery.setFirstResult(this.index); typedQuery.setMaxResults(10); this.iterator = typedQuery.getResultList().iterator(); } @Override public void close() throws Exception { LOGGER.debug("close"); this.iterator = null; } @Override public Object readItem() throws Exception { LOGGER.debug("readItem"); if (this.iterator.hasNext()) { this.index++; return this.iterator.next(); } else { initIterator(); if (this.iterator.hasNext()) { this.index++; return this.iterator.next(); } } return null; } @Override public Serializable checkpointInfo() throws Exception { LOGGER.debug("checkpointInfo"); return this.index; } }